In order to achieve higher data rates, multiple communications links, or communications channels, can be used together in parallel to form a single communications link having high bandwidth. This technique of creating one high-speed “virtual” channel out of several parallel channels is known as channel bonding, alignment or channel alignment. For example, words of data can be split into bytes, with each byte being sent over a separate communications channel by separate transmitters. The bytes of data are received by separate receivers, and then reassembled into the original data stream. For instance, four transmitters (or transceivers) can be used to transmit a data stream consisting of four-byte words, where each transmitter sends one byte of every word. Four corresponding receivers (or transceivers) each receive one byte of every word, and logic at the receiver end reassembles the bytes from each receiver into the original data stream of four-byte words.
Many current and proposed communications standards use channel bonding to achieve high data rates. For example, the XAUI interface, part of the IEEE 802.3ae 10 Gigabit Ethernet standard, provides a 10 Gb/s (Gigabits per second) communications channel by using four transmit and receive channels, each operating at 3.125 Gb/s. As another example, the Infiniband Architecture for I/O allows up to twelve 2.5 Gb/s full duplex serial links to be used together to provide a single channel with a bandwidth of up to 30 Gb/s.
One challenge in the channel bonding process is slight variations between the individual communication channels can cause the data in one or more channels to become misaligned with respect to the other channels. That is, because the transmission delays through the channels, including the delays through the transceivers, are not identical, the data in the channels can become skewed, which can lead to the incorrect reassembly of data words at the receiver end. For instance if a data byte sent through one channel reaches the receiver earlier or later than data bytes from the same data word sent through the other channels, that early or late data byte will be assembled into the wrong data word. To account for these variations, alignment markers can be used by the receivers as reference points to align the data and correct for variations in delay. An alignment marker is usually a special byte (or other series of bits) that is not used in transmitting regular data. At certain intervals, the transmitters will send alignment markers simultaneously in all channels to help receivers align. Typically, the receivers each have an elastic buffer and control logic at the receiver end can use the alignment markers to adjust read or write pointers in the elastic buffers to achieve channel bonding. However, prior art methods for channel bonding can only correct for variations that are less than approximately half the interval between alignment markers. As communication rates continue to increase, prior art channel bonding methods may not be able to compensate and correct for all possible variations in communications channels.
Therefore, methods for channel bonding with improved tolerance for inter-channel skew are needed.